Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Bezpieczeństwo skryptów PHP, Jak zabezpieczyć się przed włamaniem
Diwi
post
Post #1





Grupa: Zarejestrowani
Postów: 245
Pomógł: 4
Dołączył: 22.01.2005

Ostrzeżenie: (0%)
-----


Witam.

Chciałbym rozpocząć temat o bezpieczeństwie skryptów php. Na forum istnieje już temat o bezpieczeństwu przy wykonywaniu zapytania SQL lecz nie ma o ogólnym bezpieczeństwie skryptów.

1. Złe używanie include.

Często dołączamy pliki dynamicznie pobierając miejsce gdzie znajduje się plik metodą GET.

Przykładowy adres:
http://www.jakas-strona.pl/index.php?plik=katalog.php

Kod php:
  1. <?php
  2. include($_GET['plik']);
  3. ?>


Taki skrypt dokonałby dołączenia pliku katalog.php do skryptu lecz co by się stało gdyby włamywacz wpisał taki adres:
http://www.jakas-strona.pl/index.php?plik=...t-niszczacy.php

Dajmy na to że skrypt znajdujący się na serwerze hakera wygląda tak:

  1. <?php
  2.  
  3. $katalog = opendir('./'); /* skrypt otwiera katalog w którym się znajduje (zostaje wywołany */
  4.  
  5. while ($plik = readdir($katalog)) {
  6.  
  7. unlink($file);
  8.  
  9. }
  10.  
  11. ?>


No i jeżeli pliki w katalogu mają uprawnienia pozwalające na usunięcie ich przez skrypt to możemy się pożegnać z plikami w katalogu.

Jak temu zapobiec (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Rozwiązanie 1.

Tworzymy taki include:
  1. <?php
  2. include('./'.$_GET['katalog']);
  3. ?>


Taka instrukcja pozwala na dołączanie jedynie plików które znajdują się w katalogu ze skryptem czyli nie można załączyć pliku z innego serwera.

Ja narazie pamiętam tylko tyle lecz jeżeli znacie jakieś inne błędy popełniane przez programistów a także sposoby walczenia z nimi to się tutaj dopiszcie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam

// prosiłbym moderatorów (jeżeli można) o przyklejenie tego tematu

---
Przyklejone - hwao
Go to the top of the page
+Quote Post
16 Stron V  < 1 2 3 4 > »   
Start new topic
Odpowiedzi (20 - 39)
dr_bonzo
post
Post #21





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


A wystarczy dodac
$tablica = array();
przed jej uzyciem i po klopocie.
A poza tym to bylo tylko
Cytat
to zrób sobie tablicę w skrypcie, coś w stylu
, pisane szybko i bez doglebnego zastanowienia (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Lars
post
Post #22





Grupa: Zarejestrowani
Postów: 279
Pomógł: 15
Dołączył: 29.04.2005
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


Jeżeli już trzeba zrobić coś takiego:

  1. <?include $_GET['id'].'.php';?>


to zawsze lepiej:

  1. <?php
  2. $file=$_GET['id'].'.php';
  3. if(file_exists($file)) {
  4. include $file;
  5. } else {
  6. echo 'Błąd 404';
  7. }
  8. ?>


Jest jeszcze coś takiego (działą tylko z rg=on).

Mamy kod:
  1. <?php
  2. <form action='ksiega.php' method='post'>
  3. <input type='text' name='nick' value='twoj nick'>
  4. <textarea name='tekst'>Twoj tekst</textarea>
  5. <input type='submit' value='Wyslij'>
  6. </form>
  7. ?>


i plik ksiega.php:

  1. <?php
  2. $file=fopen('data.txt', a);
  3. $zawartosc='<b>'.$nick.'</b><br>'.$tekst.'<br><br>';
  4. fwrite($file, $zawartosc);
  5. fclose($file);
  6. echo 'OK. <a href=\"javascript:history.back()\">Wróć</a>';
  7. ?>


jest tu bardzo wiele luk, m. in:
  • 1. Możliwość wstawienia dowolnej długości nicka/tekstu
  • 2. Umieszczanie kodu !!html!!
  • 3. wpis danych przez ?nick=nick&tekst=txt
  • 4. możliwość uszkodzenia pliku data.txt przez wpisywanie sie przez 2 osoby w tym samym momencie
  • 5. użycie kodu php
jak je usunąć??

1. Użycie strlen" title="Zobacz w manualu PHP" target="_manual:
  1. <?php
  2. $file=fopen('data.txt', a);
  3. $nick=stripslashes($nick);
  4. $tekst=stripslashes($tekst);
  5. if(strlen($nick>10)) {
  6. die('Za długi nick');
  7. } elseif(strlen($tekst>100)) {
  8. die('Za długi tekst');
  9. }
  10. $zawartosc='<b>'.$nick.'</b><br>'.$tekst.'<br><br>';
  11. fwrite($file, $zawartosc);
  12. fclose($file);
  13. echo 'OK. <a href=\"javascript:history.back()\">Wróć</a>';
  14. ?>


2. Użycie strip_tags" title="Zobacz w manualu PHP" target="_manual:
  1. <?php
  2. $file=fopen('data.txt', a);
  3. $nick=stripslashes($nick);
  4. $tekst=stripslashes($tekst);
  5.  
  6. $nick=strip_tags($nick);
  7. $tekst=strip_tags($tekst);
  8.  
  9. if(strlen($nick>10)) {
  10. die('Za długi nick');
  11. } elseif(strlen($tekst>100)) {
  12. die('Za długi tekst');
  13. }
  14. $zawartosc='<b>'.$nick.'</b><br>'.$tekst.'<br><br>';
  15. fwrite($file, $zawartosc);
  16. fclose($file);
  17. echo 'OK. <a href=\"javascript:history.back()\">Wróć</a>';
  18. ?>


3. Zamiast $tekst/$nick używamy $_GET['tekst']/$_GET['nick']:
  1. <?php
  2. $file=fopen('data.txt', a);
  3. $_GET['nick']=stripslashes($_GET['nick']);
  4. $_GET['tekst']=stripslashes($_GET['tekst']);
  5. $_GET['nick']=strip_tags($_GET['nick']);
  6. $_GET['tekst']=strip_tags($_GET['tekst']);
  7.  
  8. if(strlen($_GET['nick']>10)) {
  9. die('Za długi nick');
  10. } elseif(strlen($_GET['tekst']>100)) {
  11. die('Za długi tekst');
  12. }
  13. $zawartosc='<b>'.$_GET['nick'].'</b><br>'.$_GET['tekst'].'<br><br>';
  14. fwrite($file, $zawartosc);
  15. fclose($file);
  16. echo 'OK. <a href=\"javascript:history.back()\">Wróć</a>';
  17. ?>


4. Użycie flock" title="Zobacz w manualu PHP" target="_manual:
  1. <?php
  2. $file=fopen('data.txt', a);
  3. $_GET['nick']=stripslashes($_GET['nick']);
  4. $_GET['tekst']=stripslashes($_GET['tekst']);
  5. flock($file, 2);
  6. $_GET['nick']=strip_tags($_GET['nick']);
  7. $_GET['tekst']=strip_tags($_GET['tekst']);
  8.  
  9. if(strlen($_GET['nick']>10)) {
  10. die('Za długi nick');
  11. } elseif(strlen($_GET['tekst']>100)) {
  12. die('Za długi tekst');
  13. }
  14. $zawartosc='<b>'.$_GET['nick'].'</b><br>'.$_GET['tekst'].'<br><br>';
  15. fwrite($file, $zawartosc);
  16. flock($file, 3);
  17. fclose($file);
  18. echo 'OK. <a href=\"javascript:history.back()\">Wróć</a>';
  19. ?>


5. To to samo co w punkcie 2 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) .
Powód edycji: Porządki // Piniek
Go to the top of the page
+Quote Post
Vaticinator
post
Post #23





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 10.02.2003
Skąd: Magor

Ostrzeżenie: (0%)
-----


A jest jakaś możliwość, żeby wybrane pliki dało się otwierać tylko poprzez include(), a nie bezpośrednio z przeglądarki?
Go to the top of the page
+Quote Post
sobstel
post
Post #24





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(Vaticinator @ 2005-09-16 11:21:56)
A jest jakaś możliwość, żeby wybrane pliki dało się otwierać tylko poprzez include(), a nie bezpośrednio z przeglądarki?

jest, na szybko przychodzą mi do glowy 2 sposoby :

1. umiescic pliki w jakims katalogu i zabezpieczyc plikiem .htaccess z odpowiednim wpisem (deny from all)
2. umiescic pliki powyzej public_html
Go to the top of the page
+Quote Post
bregovic
post
Post #25





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

Ostrzeżenie: (0%)
-----


Cytat(Vaticinator @ 2005-09-16 11:21:56)
A jest jakaś możliwość, żeby wybrane pliki dało się otwierać tylko poprzez include(), a nie bezpośrednio z przeglądarki?

Plik includeujący:
  1. <?php
  2.  
  3. define('x', true);
  4. include 'lol.php';
  5.  
  6. ?>


Plik lol.php:
  1. <?php
  2.  
  3. if(!x) die();
  4. //reszta pliku
  5.  
  6. ?>
Go to the top of the page
+Quote Post
mike
post
Post #26





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----



W związku z ostatnim postem tutaj, który poruszał problem już omówiony postanowiłem trochę oczyścić ten wątek.

Kilka postów zostało usuniętych - zostały te które powinny zostać (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Od tej chwili, proszę użytkowników zwłaszcza początkujących o czytanie tego wątku od początku a nie tylko dopisywanie się na końcu bez czytania całości tego wątku.

Czasem (a raczej często) rozwiązanie problemu jaki macie już padło. Warto poświęcić czas na odszukanie rozwiązania.

P.S.
To nie jest kącik lamerskich pytań(IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !
Go to the top of the page
+Quote Post
huntercs
post
Post #27





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 6.02.2005

Ostrzeżenie: (0%)
-----


Ja stosuję w sumie proste rozwiązanie, dodaje tylko strony do których użytkownik może wejść i tyle, jeżeli chce wejść na inną to jest przekierowany na str. główną
  1. <?php
  2. $Section=$_GET['Section'];
  3.  
  4. if($Section!='Main' &&
  5. $Section!='Activate' &&
  6. $Section!='Kolejna_strona' &&
  7. $Section!='Inna_strona' &&
  8. $Section!='Regulamin')
  9. header("Location: ?Section=Main");
  10. else include_once($Section.".php");
  11. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #28





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No ale poco trzeba pisac nazwe skryptu? Skoro i tak juz to oifowales, to daj identyfikator a nie nazwe. Po co ktoś ma wiedziec jakie masz skrypty?
Go to the top of the page
+Quote Post
mike
post
Post #29





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


~huntercs możesz to zrobić bardziej elastycznie i elegancko:
  1. <?php
  2.  
  3. $_GET[ 'Section' ] = ( empty( $_GET[ 'Section' ] ) ) ? 'Main' : '';
  4.  
  5. $arrAllowSection = array(
  6. 'Main' => 'Main.php',
  7. 'Activate' => 'Activate.php',
  8. 'Inna_strona' => 'Inna_strona.php',
  9. 'Regulamin'  => 'Regulamin.php'
  10. );
  11.  
  12. if( in_array( $_GET[ 'Section' ], $arrAllowSection ) )
  13. {
  14. include_once( $arrAllowSection[ $_GET[ 'Section' ] ] );
  15. }
  16. else
  17. {
  18. include_once( $arrAllowSection[ 'Main' ] );
  19. }
  20.  
  21. ?>


Masz teraz możliwość prostego i łatwego dodawanie stron i nie musisz ich adresów uzależniać od wartości $_GET[ 'Section' ]. Bo możesz dawać inne nazwy plików.
Go to the top of the page
+Quote Post
vedeney
post
Post #30





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 28.02.2006
Skąd: 127.0.0.1 :) => Ukraine

Ostrzeżenie: (0%)
-----


I like php-coding in this way (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
  1. <?php
  2. include_once(((isset($_GET[ 'Section' ]) && !empty($_GET[ 'Section' ])) && is_file(str_replace(array(".","/"),"",$_GET['Section']).".php"))?str_replace(array(".","/"),"",$_GET['Section']).".php":'Main.php');
  3. ?>


Just one line, not 21! (IMG:http://forum.php.pl/style_emoticons/default/Rkingsmiley.png)
Go to the top of the page
+Quote Post
ave
post
Post #31





Grupa: Zarejestrowani
Postów: 117
Pomógł: 2
Dołączył: 29.01.2004
Skąd: Rz-ów

Ostrzeżenie: (0%)
-----


nie prosciej switch-em ?
  1. <?php
  2. switch($_GET['id']){
  3. case 'aa': include('aa.php');break;
  4. case 'bb': include('bb.php');break;
  5. default:  include('main.php');
  6. }
  7. ?>
Go to the top of the page
+Quote Post
Speedy
post
Post #32





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

Ostrzeżenie: (0%)
-----


Switch może być dobry w przypadku, gdy jest mało stron i ich ilość nie jest mobilna. Zauważ, że dla każdego pliku musisz doklepywać osobnego case'a, a można to przecież zrobić bardziej dynamicznie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
Go to the top of the page
+Quote Post
the_foe
post
Post #33





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 26.08.2003

Ostrzeżenie: (0%)
-----


Jezeli programuje obiektowo to automatyzuje wybieranie stron przez wybieranie metod.
Zaluzmy ze $_GET['p'] odpowiada za podstrone:
  1. <?php
  2.  function get_page()
  3. {
  4. /*metoda zajmuje sie analizowaniem zmiennej p
  5. zgodnie z jej wartoscia przerzuca skrypt do 
  6. metody link_wartosc
  7. */
  8. if (!isset($_GET['p']))
  9. {
  10.  
  11. $this->link_index();
  12. }
  13. else
  14. {
  15. $a=strtolower($_GET['p']);
  16. $a=ereg_replace('([^a-z0-9_-])',"",$a);
  17. if ($a=="")
  18. {
  19. $this->link_index();
  20. }
  21. else
  22. {
  23. $z=method_exists($this,"link_".$a);
  24. if ($z==1)
  25. {
  26. eval('$this->link_'.$a.'();');
  27. }else{
  28. $this->error();
  29. }
  30. }
  31. }
  32.  
  33. }
  34. ?>

tworzymy wiec medtode dla linku www.domena.pl/?p=strona link_strona. W metodzie (funkcji) moze byc zwykly include.
Kiedy dana strona nie istnieje, czyli nie stworzylismy danej metody, zostanie uruchomiona metoda error(). Np strona bledu 404 ktora zaprojektujemy, albo zwykly redirector do indeksu.
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #34





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


Cytat(Diwi @ 2005-05-05 12:21:40)
1. Złe używanie include.

Często dołączamy pliki dynamicznie pobierając miejsce gdzie znajduje się plik metodą GET.

Przykładowy adres:
http://www.jakas-strona.pl/index.php?plik=katalog.php

Kod php:
  1. <?php
  2. include($_GET['plik']);
  3. ?>


Taki skrypt dokonałby dołączenia pliku katalog.php do skryptu lecz co by się stało gdyby włamywacz wpisał taki adres:
http://www.jakas-strona.pl/index.php?plik=...t-niszczacy.php

Dajmy na to że skrypt znajdujący się na serwerze hakera wygląda tak:

  1. <?php
  2.  
  3. $katalog = opendir('./'); /* skrypt otwiera katalog w którym się znajduje (zostaje wywołany */
  4.  
  5. while ($plik = readdir($katalog)) {
  6.  
  7. unlink($file);
  8.  
  9. }
  10.  
  11. ?>


No i jeżeli pliki w katalogu mają uprawnienia pozwalające na usunięcie ich przez skrypt to możemy się pożegnać z plikami w katalogu.

Jak temu zapobiec (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Rozwiązanie 1.

Tworzymy taki include:
  1. <?php
  2. include('./'.$_GET['katalog']);
  3. ?>


Taka instrukcja pozwala na dołączanie jedynie plików które znajdują się w katalogu ze skryptem czyli nie można załączyć pliku z innego serwera.

Ludzie litości! Wielkie zabezpieczenia, a ja widzę, że tu ktoś podstaw php nie zna! Od kiedy to w include idzie podać ścieżkę do innego serwera? Jeżeli podamy:
  1. <?
  2. include('http://www.domena.pl/skrypt.php');
  3. ?>

to skrypt nie zostanie zincludowany! Taka opcja jest możliwa jest jedynie w funkcji readfile (do tego właśnie ona jest).
Zastosowanie:
  1. <?
  2. include($zmienna);
  3. ?>

jest dosyć bezpieczne (zależy od skryptu). Najbardziej bezpieczne jest już:
  1. <?
  2. include('katalog/'.$zmienna.'.php');
  3. ?>

Ludzie - jak ja widzę takie bzdury, że wtedy za pomocą index.php?zmienna=http:///cośtam można zhackować stronę to mnie krew zalewa. Tak samo w przypadku tematu o SQL Injection - pierdół pełno powypisywane. Skoro już piszecie w ciemno, to najpierw polecam czy takie coś zadziała, a potem pisać jak przeciwdziałać.
W dodatku przy powyższym skrypcie jeżeli dodamy:
$zmienna = $_GET['zmienna'];
to nie stanie się nic innego jak to, że zmienna przybierze wartość z adresu 2 razy (a co za tym idzie skrypt będzie wykonywany wolniej). Pokażcie mi w tym jakąś lukę to zwracam honor...

Reszty postów i tematu całego wolę dalej nie czytać (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
nospor
post
Post #35





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Ludzie litości! Wielkie zabezpieczenia, a ja widzę, że tu ktoś podstaw php nie zna! Od kiedy to w include idzie podać ścieżkę do innego serwera?
hmmm, manual klamie?
http://pl.php.net/manual/pl/function.include.php
Cytat
Jeśli "URL fopen wrappers" są włączone w php (takie jest domyślne ustawienie) można podać nazwę pliku do wczytania używając adresu URL (przez protokół HTTP lub innym obsługiwanym sposobem - zajrzyj do Dodatek M aby zapoznać się z listą obsługiwanych protokołów), zamiast podawać ścieżkę lokalną.
Nie sprawdzalem tego nigdy, ale wierze manualowi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

edit: sprawdzilem. manual nie klamie. da sie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Na przyszlosc jak kogos oskarżasz o brak podstaw, sprawdź, czy sam je posiadasz (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

q.php
  1. <?php
  2. include($_GET['file']);
  3. ?>

a link do skryptu:
http://rpn/test/q.php?file=http://forum.webcity.pl/index.php
no i tym sposobem odpalilem se konkurencyjne forum, a teoretycznie chcialem moją stronę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Cytat
Reszty postów i tematu całego wolę dalej nie czytać
ja rowniez ci tego nie polecam dla Twego dobra, jeszcze cię coś naprawdę zaleje (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
Go to the top of the page
+Quote Post
kszychu
post
Post #36





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

Ostrzeżenie: (0%)
-----


A ja z kolei dodam, że3 należałoby się przyjrzeć składni include i pochodnych. Zwłaszcza polecam lekturę: jak zachowuje sieinclude pobierając pliki z innych serwerów.
Kolega LamaMASTER myli się, da się zaincludować skrypt php z innego serwera, z drobnym ale... Uważacie, że apache na tym serwerze puści na źródło skryptu, bo my go o to poprosimy?... Nie? A jak zachowa się apache?...
I obyśmy tylko takich hakerów mieli, którzy skrypt niszczący odpalają z własnego serwera :-D
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #37





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


Na moim serwerze taki trick nie działa, dlatego byłem przekonany, że nie idzie (tak samo było u moich kolegów).
Go to the top of the page
+Quote Post
nospor
post
Post #38





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




I tylko dlatego, ze u ciebie ten trick nie dziala, to jedziesz po innych uzytkownikach? oskarżasz ich o brak wiedzy, o brak testow tego co robią, o nieczytanie manuala? Zastanow sie co robisz.

Slyszales kiedys o czymś takim, ze kazdy serwer mozna inaczej skonfigurowac?

ps: wspominales cos o zwróceniu honoru... jakos tego nie zauwazylem bys to zrobil (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #39





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


Cytat
ps: wspominales cos o zwróceniu honoru... jakos tego nie zauwazylem bys to zrobil

\/
Cytat
Pokażcie mi w tym jakąś lukę to zwracam honor


Cytat
Gdzie masz jakieś pierdoły na ten temat? Podaj przykłady, a nie świeć swoimi mądrościami.

Przykład: Skoro mamy np. mysql_query, to nie jest możliwe zrobienie czegoś takiego: news.php?id=1;DROP%20TABLE%20news; , bo mysql_query pozwala na wysłanie tylko jednego zapytania.

Poświeciłem poświeciłem i się wyświeciło (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Przepraszam za zamieszanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Vengeance
post
Post #40





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Ale przy postgresql, mssql czy oracle to już zadziała... pamiętaj, świat nie ogranicza się do mySQL
Go to the top of the page
+Quote Post

16 Stron V  < 1 2 3 4 > » 
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 20:42